package com.zero.demo.jms.dao;


import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;

/**
 * <p>mybatis基础dao </p>
 *
 * @author yangaj
 * @version V1.0
 * @Package org.cbs.framework.orm
 * @date
 */
public interface BaseMapper<T, E, ID extends Serializable> {

    /**
     * 根据条件查询记录数量
     *
     * @param example
     * @return
     */
    int countByExample(E example);

    /**
     * 根据条件删除记录
     *
     * @param example
     * @return
     */
    int deleteByExample(E example);

    /**
     * 根据主键删除记录
     *
     * @param id
     * @return
     */
    int deleteByPrimaryKey(ID id);

    /**
     * 插入记录
     *
     * @param record
     * @return
     */
    int insert(T record);

    /**
     * 插入记录有效字段
     *
     * @param record
     * @return
     */
    int insertSelective(T record);

    /**
     * 根据条件查询记录
     *
     * @param example
     * @return
     */
    List<T> selectByExample(E example);


    /**
     * 根据主键查询记录
     *
     * @param id
     * @return
     */
    T selectByPrimaryKey(ID id);

    /**
     * 根据条件更新有效字段
     *
     * @param record
     * @param example
     * @return
     */
    int updateByExampleSelective(@Param("record") T record, @Param("example") E example);

    /**
     * 根据条件更新记录
     *
     * @param record
     * @param example
     * @return
     */
    int updateByExample(@Param("record") T record, @Param("example") E example);

    /**
     * 根据主键更新记录有效字段
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(T record);

    /**
     * 根据主键更新记录
     *
     * @param record
     * @return
     */
    int updateByPrimaryKey(T record);

}